package org.theSeed.fileContract.contract;

import org.theSeed.fileContract.paramEncoder.SeedFileParamEncoder;
import org.theSeed.fileContract.pojo.dto.*;
import org.theSeed.fileContract.pojo.prop.FileConfigProp;
import org.theSeed.fileContract.pojo.vo.*;

import java.io.FileInputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.List;
import java.util.Map;

/**
 * 文件合约
 */
public interface FileContract{
    /**
     * 获取文件
     * @return
     */
    InputStream getFile(SeedGetFileDto seedGetFileDto);

    /**
     * 文件上传
     */
    SeedUploadFileVo uploadFile(SeedUploadFileDto seedUploadFileDto);

    /**
     * 文件上传更新
     */
    SeedUploadFileVo updateFile(SeedUpdateFileDto seedUpdateFileDto);

    /**
     * 文件删除
     */
    SeedUploadFileVo deleteFile(SeedDeleteFileDto seedDeleteFileDto);


    /**
     * 分片上传 文件上传初始化
     */
    SeedUploadChipFileInitVo initUploadChipFile(SeedUploadChipFileInitDto seedUploadChipFileInitDto);

    /**
     * 分片上传
     */
    SeedUploadFileVo uploadChipFile(SeedUploadChipFileDto seedUploadChipFileDto,SeedUploadChipFileExtDto seedUploadChipFileExtDto);

    /**
     * 上传文件合并
     */
    SeedUploadFileVo mergeChipFile(MergeChipFileDto mergeChipFileDto,SeedUploadChipFileExtDto seedUploadChipFileExtDto);

    /**
     * 文件分片上传取消
     */
    CancleChipFileVo cancleChipFile(CancleChipFileDto cancleChipFileDto,SeedUploadChipFileExtDto seedUploadChipFileExtDto);

    /**
     * 合约实例名称
     * @return
     */
    String getContractTypeInstance();

    /**
     * 获取文件上传系统配置
     * @return
     */
    FileConfigProp getFileConfigProp();

    /**
     * 上传文件实现类型
     * @return
     */
    String getContractType();

    /**
     * 判断是否为当前实例创建
     * @return
     */
    Boolean jurgeInstance(String requestUrl);

    /**
     * 获取资源唯一地址
     * @param requestUrl
     * @return
     */
    ResourceUrlDividVo sliceRequestUrl(String requestUrl);

    /**
     * 获取分片大小
     * @return
     */
    Long getChipFileSize();

    void destroy();
}
